//
//  CZMessageTableViewController.swift
//  WeiBo
//
//  Created by Apple on 16/9/4.
//  Copyright © 2016年 KY. All rights reserved.
//

import UIKit
//  重用标记
private let CZHomeTableViewCellIdentifier = "CZHomeTableViewCellIdentifier"
class CZHomeTableViewController: CZVisitorTableViewController {
    
    //  微博数据源
//    var statusList: [CZStatus]?
    
    //  微博数据请求的ViewModel
    fileprivate lazy var statusListViewModel: CZStatusListViewModel = CZStatusListViewModel()
    
    // MARK:    -懒加载控件
    //  上拉加载视图
    fileprivate lazy var pullUpView: UIActivityIndicatorView = {
        let view = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge)
        view.color = UIColor.red
        return view
    }()
    //  下拉刷新视图
//    fileprivate lazy var pullDownView: UIRefreshControl = {
//        let refreshCtr = UIRefreshControl()
//        refreshCtr.addTarget(self, action: #selector(pullDownRefresh(refreshCtr: )), for: .valueChanged)
//        return refreshCtr
//    }()
    

    //  自定义下拉刷新控件
    fileprivate lazy var pullDownView: CZRefreshControl = {
        let refreshCtr = CZRefreshControl()
        refreshCtr.addTarget(self, action: #selector(pullDownRefresh(refreshCtr: )), for: .valueChanged)
        return refreshCtr
    }()
    
    //  tip动画视图
    fileprivate lazy var tipLabel: UILabel = {
        let label = UILabel(fontSize: 11, textColor: UIColor.white)
        label.backgroundColor = UIColor.orange
        label.text = "没有加载到最新得微博数据"
        label.textAlignment = .center
        label.isHidden = true
        return label
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        if !isLogin {
            visitorView?.updateVisitorViewInfo(message: nil, imageName: nil)
        } else {
        
            setupUI()
            
            //  登录成功，加载微博数据
            loadData()
            
        }
        
        
    }
    
    //  添加控件设置约束
    private func setupUI() {
        setupTableView()
        //  添加tipLabel
        if let nav = navigationController {
            nav.view.insertSubview(tipLabel, belowSubview: nav.navigationBar)
            //  设置按钮的宽度
            tipLabel.width = nav.navigationBar.width
            tipLabel.height = 30
            //  设置y轴
            tipLabel.y = nav.navigationBar.frame.maxY - tipLabel.height
        }
        
    }
    
    //  tableview相关操作
    private func setupTableView() {
        
//        let a: AnyClass = UITableViewCell.classForCoder()
//        let b = UITableViewCell.self
        //  注册cell
        tableView.register(CZHomeTableViewCell.self, forCellReuseIdentifier: CZHomeTableViewCellIdentifier)
        
        
        //  设置行高, 自动行高
        tableView.rowHeight = UITableViewAutomaticDimension
        //  预估行高
        tableView.estimatedRowHeight = 200
        
        //  去掉分割线
        tableView.separatorStyle = .none
        
        //  设置上拉加载视图到tableview的footerView
        tableView.tableFooterView = pullUpView
        //  如果没有给菊花转留位置，设置菊花转的大小
        pullUpView.sizeToFit()
        
        //  设置下拉刷新
        //  方式1
//        self.refreshControl = pullDownView
        //  方式2 ios 10
//        if #available(iOS 10.0, *) {
//            tableView.refreshControl = pullDownView
//        } else {
//            // Fallback on earlier versions
//            // 之前添加下拉刷新的方式
//            tableView.addSubview(pullDownView)
//        }
        

        //  添加自定义的下拉刷新控件
        tableView.addSubview(pullDownView)
        
    }
    
    // MARK:    --下拉刷新方法
    @objc private func pullDownRefresh(refreshCtr: UIRefreshControl) {
        //  下拉刷新请求方法
        loadData()
        
        
    }
    
    //  关闭刷新状态
    fileprivate func endRefreshing() {
        pullUpView.stopAnimating()
        //  结束下拉刷新
        pullDownView.endRefreshing()
    }
    
    //  开启动画
    private func startAnimation(message: String) {
        if tipLabel.isHidden == false {
            return
        }
        
        tipLabel.text = message
        //  显示
        tipLabel.isHidden = false
    
        //  开启动画
        UIView.animate(withDuration: 1, animations: {
            
            self.tipLabel.transform = CGAffineTransform(translationX: 0, y: self.tipLabel.height)
            
            }) { (_) in
                UIView.animate(withDuration: 1, animations: { 
                    self.tipLabel.transform = CGAffineTransform.identity
                    
                    }, completion: { (_) in
                        self.tipLabel.isHidden = true
                })
        }
        
    }
    
    
    
    //  请求微博数据
    fileprivate func loadData() {
        
        
        statusListViewModel.loadData(isPullup: pullUpView.isAnimating) { (isSuccess, message) in
            //  下拉刷新开启动画
            if !self.pullUpView.isAnimating {
                //  开启动画
                self.startAnimation(message: message)
            }
            
            //  数据请求成功结束刷新
            self.endRefreshing()
            if isSuccess {
                self.tableView.reloadData()
            }
        }
        
    //  代码已经抽取到CZStatusListViewModel中
//        CZNetworkTools.sharedTools.requestStatus(accesstoken: CZUserAccountViewModel.sharedUserAccount.accessToken!) { (response, error) in
//            if error != nil {
//                print("网络请求异常:\(error)")
//                return
//            }
//            
//            //  代码执行到此，请求成功，完成字典转模型
//            guard let dic = response as? [String: Any] else {
//                print("字典格式不正确")
//                return
//            }
//            
//            guard let dicArray = dic["statuses"] as? [[String: Any]] else {
//                print("字典数据为nil")
//                return
//            }
//            
//            //  遍历字典完成字典转转模型
//            var tempArray: [CZStatus] = [CZStatus]()
//            for dic in dicArray {
//                
//                let status = CZStatus(dic: dic)
//                tempArray.append(status)
//            }
//            print("-------")
//            print(tempArray.count)
//            print("-------")
//            //  保存数据，更新UI,当前闭包是逃离的需要使用self指定作用域
//            self.statusList = tempArray
//            self.tableView.reloadData()
//            
//        }
    }
    
}

extension CZHomeTableViewController {
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statusListViewModel.statusList.count
        
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        let cell = tableView.dequeueReusableCell(withIdentifier: CZHomeTableViewCellIdentifier, for: indexPath) as! CZHomeTableViewCell
        //  绑定cell数据
        cell.statusViewModel = statusListViewModel.statusList[indexPath.row]
        //  选中颜色去掉
        cell.selectionStyle = .none
        return cell
    }
    
    //  cell将要显示的时候
    override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        //  如果滚动到最后一个cell并且是菊花转没有开启动画，让其开启菊花转
        if indexPath.row == statusListViewModel.statusList.count - 1 && !pullUpView.isAnimating {
            pullUpView.startAnimating()
            
            //  拿到最后一条微博id加载数据
            loadData()
        }
        
        
    }
    
    
    
   
}






















